<?php
/**
 * 订单 管理
 *
 * @author    Alex Xun xunzhibin@expert.com
 * @version   1.0
 * @copyright (C) 2018 Jnexpert Ltd. All rights reserved
 * @file      pay\controller\v1\Order.php
 */

namespace app\pay\controller\v1;

use controller\BasicWechat;

/**
 * 订单 控制器类
 *
 * @author Alex Xun xunzhibin@jnexpert.com
 * @package controller
 */
class Order extends BasicWechat
{
    /**
     * 公众号 第三方库 初始化
     *
     * 根据具体所需服务，实例不同的接口类
     *
     * @author Alex Xun xunzhibin@jnexpert.com
     */
    protected function initVendor()
    {
        // 实例化 第三方库
        $this->wechat = new \WeChat\Pay($this->config);
    }

    /**
     * 统一下单
     *
     * @author Alex Xun xunzhibin@jnexpert.com
     */
    public function create()
    {
        /**
         * $data = [
         *      // 必需
         *          // 配置文件配置
         *      'appid'  => '',// 微信公众号ID
         *      'mch_id' => '',// 微信商户号
         *          // 自动生成
         *      'nonce_str' => '',// 随机字符串
         *      'sign'      => '',// 签名
         *          // request 提交
         *      'body'             => '',// 商品描述
         *      'out_trade_no'     => '',// 商户订单号(项目自己的订单号,非微信)
         *      'total_fee'        => '',// 订单总金额(分)
         *      'spbill_create_ip' => '',// 终端IP
         *      'notify_url'       => '',// 通知地址(异步回调地址, 接收支付结果)
         *      'trade_type'       => '',// 交易类型
         *      'openid'           => '',// 用户标识(公众号支付<trade_type = JSAPI>时必需)
         *      // 非必需
         *      'time_start'  => '',// 交易起始时间
         *      'time_expire' => '',// 交易结束时间
         * ]
         **/

        // 创建订单
        $result = $this->wechat->createOrder($this->data);

        // 响应
        return $this->responsePay($result, true);
    }

    /**
     * 查询订单
     *
     * @author Alex Xun xunzhibin@jnexpert.com
     */
    public function read()
    {
        $options = [
            'transaction_id' => '', // 微信订单号
            'out_trade_no' => '', // 商户订单号
        ];
        if(isset($this->data['transaction_id'])) {
            $options['transaction_id'] = $this->data['transaction_id'];
        }
        if(isset($this->data['out_trade_no'])) {
            $options['out_trade_no'] = $this->data['out_trade_no'];
        }
        $options = array_filter($options);

        // 查询
        $result = $this->wechat->queryOrder($options);

        unset($result['return_code']);
        unset($result['return_msg']);
        unset($result['result_code']);
        unset($result['err_code']);
        unset($result['err_code_des']);

        // 响应
        return $this->responsePay($result, true);
    }

    /**
     * 关闭订单
     *
     * @author Alex Xun xunzhibin@jnexpert.com
     */
    public function delete()
    {
        // 关闭
        $result = $this->wechat->closeOrder($this->param['out_trade_no']);

        // 响应
        return $this->responsePay($result, true);
    }
}
